package com.sunrise.generico.entidade;

import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import lombok.Getter;
import lombok.Setter;

import com.sunrise.generico.entidade.iface.EntidadeNegocio;
import com.sunrise.generico.enums.ProcessoEmissaoNFe;
import com.sunrise.generico.enums.TipoAmbiente;
import com.sunrise.generico.enums.TipoEmissaoNFe;
import com.sunrise.generico.enums.TipoFinalidadeNotaFiscal;
import com.sunrise.generico.enums.TipoImpressaoDanfe;
import com.sunrise.generico.enums.TipoNotaFiscal;
import com.sunrise.generico.enums.TipoPagamentoNFe;
import com.sunrise.generico.enums.UF;

@Entity
@Table(name = "nota_fiscal")
public class NotaFiscal implements EntidadeNegocio {

	/**
	 * 
	 */
	private static final long serialVersionUID = -307041236011097321L;

	@Id
	@SequenceGenerator(name="pk_sequence",sequenceName="colecao_id_seq", allocationSize=1)
	@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="pk_sequence")
	@javax.persistence.Column
	@Getter @Setter
	private Long id;
	
	@javax.persistence.Column(name = "numero", length = 9)
	@Getter @Setter
	private Integer numero;
	
	@javax.persistence.Column(name = "codigo", length = 8)
	@Getter @Setter
	private Long codigo;
	
	@Column(name = "dataEmissaoNF")
	@Getter @Setter
	private Date dataEmissao;
	
	@Column(name = "dataLancamentoNF")
	@Getter @Setter
	private Date dataLancamento;
	
	@OneToOne
	@Getter @Setter
	private SerieNF serie;
	
	@OneToOne(cascade = CascadeType.ALL)
	@Getter @Setter
	private ModeloNF modelo;
	
	@OneToOne(cascade = CascadeType.ALL)
	@Getter @Setter
	private NaturezaNF natureza;
	
	@Enumerated(EnumType.ORDINAL)
	@Getter @Setter
	private UF uf;
	
	@Enumerated(EnumType.ORDINAL)
	@Column(name = "tipoNotaFiscal")
	@Getter @Setter
	private TipoNotaFiscal tipoNotaFiscal;
	
	@Enumerated(EnumType.ORDINAL)
	@Column(name = "tipoFinalidadeNotaFiscal")
	@Getter @Setter
	private TipoFinalidadeNotaFiscal tipoFinalidadeNotaFiscal;

	@Enumerated(EnumType.ORDINAL)
	@Column(name = "tipoPagamentoNFe")
	@Getter @Setter
	private TipoPagamentoNFe tipoPagamentoNFe;
	
	@Enumerated(EnumType.ORDINAL)
	@Column(name = "tipoImpressaoNFe")
	@Getter @Setter
	private TipoImpressaoDanfe tipoImpressaoDanfe;
	
	@Enumerated(EnumType.ORDINAL)
	@Column(name = "tipoEmissaooNFe")
	@Getter @Setter
	private TipoEmissaoNFe tipoEmissaoNFe;
	
	@Enumerated(EnumType.ORDINAL)
	@Column(name = "tipoAmbiente")
	@Getter @Setter
	private TipoAmbiente tipoAmbiente;
	
	@Enumerated(EnumType.ORDINAL)
	@Column(name = "processoEmissao")
	@Getter @Setter
	private ProcessoEmissaoNFe processoEmissao;
	
	@Column(name = "digitoValidador")
	@Getter @Setter
	private Integer digitoValidador;
	

}
